/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Devolucion;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.sql.Statement;
import java.sql.ResultSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author nan
 */
public class devolucionListar implements ActionListener, KeyListener{

    private Conexion.ConexionBD conectar = new Conexion.ConexionBD();
    private devolucionListarGUI ventana = new devolucionListarGUI();
    private DefaultTableModel dtmDevolucion;

    public devolucionListar(){
        ventana.setLocationRelativeTo(null);
        ventana.setActionListeners(this);
        ventana.setKeyListener(this);
        ventana.setVisible(true);
        actualizarTabla();
    }

    public void actualizarTabla(){
        String[] titulos = {"IDDevolucion", "Total", "Cantidad Articulos", "Fecha","Tipo Pago","Usuario"};
        Object[][] datos = {};
        dtmDevolucion = new DefaultTableModel(datos, titulos);

        conectar.conectar();
        Statement st;
        try {
            st = conectar.getConn().createStatement();
            String consulta = "SELECT * FROM \"Devolucio\"";
            ResultSet rs = st.executeQuery(consulta);
            String id = null;
            while (rs.next()){
                Object[] fila = {rs.getString(1),
                rs.getString(2),
                rs.getString(3),
                rs.getString(4),
                rs.getString(5),
                rs.getString(4)};
                dtmDevolucion.addRow(fila);
            }
        } catch (Exception e){
            e.printStackTrace();
        }
        ventana.getjTableArticulos().setModel(dtmDevolucion);
    }

    public double actualizarPorCampo(String FechaD,String FechaH){
        String[] titulos = {"IDDevolucion", "Total", "Cantidad Articulos", "Fecha","Tipo Pago","Usuario"};
        Object[][] datos = {};
        dtmDevolucion = new DefaultTableModel(datos, titulos);

        int cant = 0;
        double total = 0;
        conectar.conectar();
        Statement st;
        try {
            st = conectar.getConn().createStatement();
            String consulta = "SELECT * FROM \"Devolucio\" WHERE \"Fecha\">='"+FechaD+"' AND \"Fecha\" <= '"+FechaH+"';" ;
            ResultSet rs = st.executeQuery(consulta);
            String id = null;
            while (rs.next()){
                Object[] fila = {rs.getString(1),
                rs.getString(2),
                rs.getString(3),
                rs.getString(4),
                rs.getString(5),
                rs.getString(6)};
                total = total + rs.getDouble(2);
                dtmDevolucion.addRow(fila);
                cant = cant +1;
            }
        } catch (Exception e){
            e.printStackTrace();
        }
        conectar.cerrar();
        ventana.getjTableArticulos().setModel(dtmDevolucion);
        return total;
    }

    public boolean esFecha(String fech){
        Pattern p;
        p = Pattern.compile("^(31|30|2[0-9]{1}|1[0-9]{1}|0[1-9]{1})/(0[1-9]{1}|1[0-2]{1})/[0-9]{4}$");
        Matcher m = p.matcher(fech);
        return m.matches();
    }

    public void actionPerformed(ActionEvent e) {
        int select = ventana.getjTableArticulos().getSelectedRow();
        if (e.getSource() == ventana.getjButtonMostrarTodos()){
            actualizarTabla();
            ventana.getjTextFieldfechad().setText("");
            ventana.getjTextFieldfechah().setText("");
        } else if (e.getSource() == ventana.getjButtonEliminar()){
            eliminar(select);
        } else 
         if (e.getSource() == ventana.getjButtonMostrarCampo()){
            String fechad = ventana.getjTextFieldfechad().getText();
            String fechah =ventana.getjTextFieldfechah().getText();
            if (esFecha(fechad)&esFecha(fechah)){
                actualizarPorCampo(fechad,fechah);
                ventana.getjTextFieldfechad().setText("");
                ventana.getjTextFieldfechah().setText("");
            }else{
                JOptionPane.showMessageDialog(null, "Ingrese dd/mm/aaaa", "Ingrese fecha", JOptionPane.INFORMATION_MESSAGE);

            }

        }
        if (e.getSource() == ventana.getjButtonSalir()){
            ventana.dispose();
        }
    }

    private void eliminar(int select){
        if (select != -1){
            String a = dtmDevolucion.getValueAt(select, 0).toString();

            conectar.conectar();
            int confirmado = JOptionPane.showConfirmDialog(null,"¿Está seguro que desea eliminar el Gasto?", "Eliminar Gastos", JOptionPane.YES_NO_OPTION);

            if (JOptionPane.OK_OPTION == confirmado){
                try {
                    Statement st = conectar.getConn().createStatement();
                    System.out.println(a);
                    String borrar = "DELETE FROM \"Devolucio\" WHERE \"IDDevolucion\" = '"+a+"';";
                    System.out.println(st.execute(borrar));
                    st.close();
                } catch (Exception ex) {   
                    ex.printStackTrace();
                }
                conectar.cerrar();
                this.actualizarTabla();
                JOptionPane.showMessageDialog(null, "Se ha eliminado el Gasto", "Elemento eliminado", JOptionPane.INFORMATION_MESSAGE);
            }
        } else {
            JOptionPane.showMessageDialog(null, "Debe seleccionar un elemento", "Error por seleccion nula", JOptionPane.ERROR_MESSAGE);
        }
    }

    public void keyTyped(KeyEvent e) {

    }

    public void keyPressed(KeyEvent e) {   }

    public void keyReleased(KeyEvent e) {   }

    public void setVisible(boolean b) {
        ventana.setVisible(b);
    }

}
